package com.closeenough.app;

import android.graphics.Point;
import android.location.Location;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;

public class GeoPointHelper {

	public static GeoPoint getPointClicked(int x, int y, MapView mapView) {
		Projection projection = mapView.getProjection();		
		GeoPoint geoPoint = projection.fromPixels(x,y);		
		return geoPoint;
	}

	public static GeoPoint fromLocation(Location location) {
		int lat = (int) (location.getLatitude() * 1E6);
		int lng = (int) (location.getLongitude() * 1E6);

		return new GeoPoint(lat, lng);
	}
	
	public static Point getPoint(GeoPoint g, MapView mapView)
	{
		Point point = new Point();
		mapView.getProjection().toPixels(g, point);
		return point;
	}

	public static int getPixelDistance(OverlayItem meetingItem, MapView mapView, int meters) {
		//este metodo podria resumirse mucho pero creo que seria mas dificil seguir las cuentas
		//mejor que quede verbose.
		GeoPoint g = meetingItem.getPoint();
		double pointLatitude = g.getLatitudeE6() / 1E6;
		//1 grado de latitud = aprox. 111 km, regla de tres. 
		//El radio esta en metros, lo divido por 1000 para llevarlo a km
		double circleLatitud = ((double)meters / 1000 / 111) + pointLatitude;
		//GeoPoint del circulo: misma longitud que la meeting, desplazado en latitud 
		//tantos metros como requiera el circulo
		GeoPoint circlePoint = new GeoPoint((int) (circleLatitud * 1E6) , g.getLongitudeE6());
		//El radio en pixels sale de restar los Points  que son relativos a 
		//la pantalla, no al mapa
		int radius = getPoint(g, mapView).y - getPoint(circlePoint, mapView).y;
		//yay!
		return radius;
	}
}
